package object

import (
	"fmt"
	"strconv"
)

type Pagination struct {
	// 页码
	PageNo uint32 `json:"page_no"`
	// 页码大小
	PageSize uint32 `json:"page_size"`
}

func NewPagination(pageNo, pageSize uint32) Pagination {
	return Pagination{
		PageNo:   pageNo,
		PageSize: pageSize,
	}
}

// GetDbOffset 获取数据库偏移
func (p *Pagination) GetDbOffset() string {
	if p.PageSize == 0 {
		return ""
	}
	if p.PageNo == 0 {
		p.PageNo = 1
	}
	offset := (p.PageNo - 1) * p.PageSize
	return fmt.Sprintf(" LIMIT %d OFFSET %d", p.PageSize, offset)
}

// ParsePageNo Parse 字符串解析
func (p *Pagination) ParsePageNo(pageNo string) {
	if pageNo == "" {
		p.PageNo = 1
	} else {
		t, _ := strconv.ParseInt(pageNo, 10, 64)
		p.PageNo = uint32(t)
	}
}

// ParsePageSize Parse 字符串解析
func (p *Pagination) ParsePageSize(pageSize string) {
	if pageSize != "" {
		t, _ := strconv.ParseInt(pageSize, 10, 64)
		p.PageSize = uint32(t)
	} else {
		p.PageSize = 0
	}
}
